Xiaobai learns the factory pattern of design patterns

Factory pattern (used in projects that require a large number of instantiated objects): 
define a class that creates objects, and use this class to encapsulate the behavior of instantiating objects
Factory method pattern:
define an abstract method for creating objects, and let subclasses decide what to do For instantiated classes, the factory method pattern defers the instantiation of objects to subclasses.
Abstract factory pattern:
defines an interface for creating related or dependent object families without explicitly specifying specific classes

.
Have references to concrete classes
Don't let classes inherit from concrete classes, inherit from abstract classes or interfaces
Don't override implemented methods in base classes

First abstract the pizza class:
package com.wz.FiveFactory;

public abstract class Pizza {
protected String name;

public abstract void prepare();
public void bake()
{
System.out.println(name+" baking;");
}
public void cut()
{
System.out.println(name+" cutting;");
}
public void box()
{
System.out.println(name+" boxing;");
}
public void setname(String name)
{
this.name=name;
}
}
不同国家不同口味的披萨:
伦敦:
package com.wz.FiveFactory;

public class LDPepperPizza extends Pizza {

@Override
public void prepare() {
// TODO Auto-generated method stub
super.setname("LDPepperPizza");

System.out.println(name+" preparing;");
}

}
package com.wz.FiveFactory;

public class LDCheesePizza extends Pizza {

@Override
public void prepare() {
// TODO Auto-generated method stub
super.setname("LDCheesePizza");

System.out.println(name+" preparing;");
}

}

纽约:
package com.wz.FiveFactory;

public class NYCheesePizza extends Pizza {

@Override
public void prepare() {
// TODO Auto-generated method stub
super.setname("NYCheesePizza");

System.out.println(name+" preparing;");
}

}
package com.wz.FiveFactory; 

public class NYPepperPizza extends Pizza {

@Override
public void prepare() {
// TODO Auto-generated method stub
super.setname("NYPepperPizza");

System.out.println(name+" preparing;") ;
}

}
Design the state as an interface (factory):
package com.wz.FiveFactory;


public interface AbsFactory {
public Pizza CreatePizza(String ordertype) ;
}
London:
package com.wz.FiveFactory;

public class LDFactory implements AbsFactory {


@Override
public Pizza CreatePizza(String ordertype) {
Pizza pizza = null;

if (ordertype.equals("cheese")) {
pizza = new LDCheesePizza();
} else if (ordertype.equals("pepper")) {
pizza = new LDPepperPizza();
}
return pizza;

}

}

纽约:
package com.wz.FiveFactory;

public class NYFactory implements AbsFactory {


@Override
public Pizza CreatePizza(String ordertype) {
Pizza pizza = null;

if (ordertype.equals("cheese")) {
pizza = new NYCheesePizza();
} else if (ordertype.equals("pepper")) {
pizza = new NYPepperPizza();
}
return pizza;

}

}

最后的测试:
package com.wz.FiveFactory; 



public class PizzaStroe {
public static void main(String[] args) {

OrderPizza mOrderPizza;
// different countries are represented
here mOrderPizza=new OrderPizza(new LDFactory());

}



}




Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324661293&siteId=291194637