1. 程式人生 > 實用技巧 >4、工廠方法模式、簡單工廠、多方法靜態工廠(常用)工廠模式 創造型模式

4、工廠方法模式、簡單工廠、多方法靜態工廠(常用)工廠模式 創造型模式

1

2

3

4

GoF23

~ ~~

1

1.調

2.

3.


1.1Drinks

Drinksproduce();
packagecn.design.factorymethod.simplefactory;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:53
*@DescriptionDrinksproduce();
*/
publicabstractclassDrinks{

protectedabstractvoidproduce();

}

1.2Sprite

2.SpriteDrinksproduce
packagecn.design.factorymethod.simplefactory;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:53
*@Description2.SpriteDrinksproduce
*/
publicclassSpriteextendsDrinks{
@Override
protectedvoidproduce(){
System.out.println("drinksprite");
}
}

1.3Cola

3.ColaDrinks
packagecn.design.factorymethod.simplefactory;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:56
*@Description3.ColaDrinks
*/
publicclassColaextendsDrinks{
@Override
protectedvoidproduce(){
System.out.println("DrinkCola");
}
}

1.4DrinksFactory

4.DrinksFactoryproduceDrink
packagecn.design.factorymethod.simplefactory;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:57
*@Description4.DrinksFactoryproduceDrink
*/
publicclassDrinksFactory{

publicDrinksproduceDrink(ClassclassName){
try{
return(Drinks)Class.forName(className.getName()).newInstance();
}catch(InstantiationException|IllegalAccessException|ClassNotFoundExceptione){
e.printStackTrace();
}

returnnull;
}

}

1.5

packagecn.design.factorymethod.simplefactory;

/**
*@authorlin
*@version1.0
*@date2020-07-1618:20
*@Description5.ClientClientColaSpriteDrinkFactoryproduceDrink
*/
publicclassClient{
publicstaticvoidmain(String[]args){
DrinksFactoryfactory=newDrinksFactory();
Colacola=(Cola)factory.produceDrink(Cola.class);
cola.produce();
Drinkssprite=factory.produceDrink(Sprite.class);
sprite.produce();
}
}

:

DrinkCola
drinksprite

1.6


1.
2.


1.
2.

2

使typeClass

使 調使便

StaticDrinksFactory

packagecn.design.factorymethod.simplefactory;

/**
*@authorlin
*@version1.0
*@date2020-07-1618:57
*@DescriptionTODO
*/
publicclassStaticDrinksFactory{

publicstaticDrinkscreateCola(){
returnnewCola();
}

publicstaticDrinkscreateSprite(){
returnnewSprite();
}
}

packagecn.design.factorymethod.simplefactory;

/**
*@authorlin
*@version1.0
*@date2020-07-1618:20
*@Description5.ClientClientColaSpriteDrinkFactoryproduceDrink
*/
publicclassClient2{
publicstaticvoidmain(String[]args){
Drinkscola=StaticDrinksFactory.createCola();
cola.produce();
Drinkssprite=StaticDrinksFactory.createSprite();
sprite.produce();
}
}

:

DrinkCola
drinksprite

3

Factory Method(framework)


Productuse

Factorycreate

IDCarduse

IDCardFactorycreateProductregisterProduct

EmailCarduse

EmailCardFactorycreateProductregisterProduct

Main

3.1Product

packagecn.design.factorymethod.framework;

/**
*@authorlin
*@version1.0
*@date2020-07-1615:53
*@DescriptionTODO
*/
publicabstractclassProduct{
publicabstractvoiduse();
}

3.2Factory

packagecn.design.factorymethod.framework;

/**
*@authorlin
*@version1.0
*@date2020-07-1615:55
*@DescriptionTODO
*/
publicabstractclassFactory{

publicfinalProductcreate(Stringowner){
Productproduct=createProduct(owner);
registerProduct(product);
returnproduct;
}

protectedabstractProductcreateProduct(Stringowner);

protectedabstractvoidregisterProduct(Productproduct);
}

3.3IDCard

packagecn.design.factorymethod.idcard;

importcn.design.factorymethod.framework.Product;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:00
*@DescriptionTODO
*/
publicclassIDCardextendsProduct{
privateStringowner;

publicIDCard(Stringowner){
this.owner=owner;
System.out.println(""+owner+"ID");
}

@Override
publicvoiduse(){
System.out.println("使"+owner+"ID");
}

publicStringgetOwner(){
returnowner;
}

publicvoidsetOwner(Stringowner){
this.owner=owner;
}
}

3.4IDCardFactory

packagecn.design.factorymethod.idcard;

importcn.design.factorymethod.framework.Factory;
importcn.design.factorymethod.framework.Product;

importjava.util.ArrayList;
importjava.util.List;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:02
*@DescriptionTODO
*/
publicclassIDCardFactoryextendsFactory{
privateList<String>owners=newArrayList<>();

@Override
protectedProductcreateProduct(Stringowner){
returnnewIDCard(owner);
}

@Override
protectedvoidregisterProduct(Productproduct){
owners.add(((IDCard)product).getOwner());
}

publicList<String>getOwners(){
returnowners;
}
}

3.5EmailCard

packagecn.design.factorymethod.idcard;

importcn.design.factorymethod.framework.Product;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:00
*@DescriptionTODO
*/
publicclassEmailCardextendsProduct{
privateStringemail;

publicEmailCard(Stringowner){
this.email=owner;
System.out.println("email:"+owner);
}

@Override
publicvoiduse(){
System.out.println("使email:"+email);
}

publicStringgetEmail(){
returnemail;
}

publicvoidsetEmail(Stringemail){
this.email=email;
}
}

3.6EmailCardFactory

packagecn.design.factorymethod.idcard;

importcn.design.factorymethod.framework.Factory;
importcn.design.factorymethod.framework.Product;

importjava.util.ArrayList;
importjava.util.List;

/**
*@authorlin
*@version1.0
*@date2020-07-1616:02
*@DescriptionTODO
*/
publicclassEmailCardFactoryextendsFactory{
privateList<String>emails=newArrayList<>();

@Override
protectedProductcreateProduct(Stringemail){
returnnewEmailCard(email);
}

@Override
protectedvoidregisterProduct(Productproduct){
emails.add(((EmailCard)product).getEmail());
}

publicList<String>getEmails(){
returnemails;
}
}

3.7Main

packagecn.design.factorymethod;

importcn.design.factorymethod.framework.Factory;
importcn.design.factorymethod.framework.Product;
importcn.design.factorymethod.idcard.EmailCardFactory;
importcn.design.factorymethod.idcard.IDCardFactory;
importcom.sun.org.apache.bcel.internal.generic.NEW;

/**
*@authorlin
*@version1.0
*@date2020-07-1615:43
*@DescriptionTODO
*/
publicclassTestMain{
publicstaticvoidmain(String[]args){
Factoryfactory=newIDCardFactory();
Productp1=factory.create("");
p1.use();
EmailCardFactoryfactory2=newEmailCardFactory();
Productp2=factory2.create("123@qq.com");
p2.use();
}

}

:

ID
使ID
email:123@qq.com
使email:123@qq.com

-

switch

使

使

使DOM

使

使使


圈~

注公眾號