Head First Design modèle usine simple, Patterns-- (usine statique)

Dans cet article, une connaissance de base des diagrammes de classes UML, s'il ne sont pas claires peut se référer à:

UML bonne façon de manger ---- solution positive! !

Lorsque nous instancier un objet, la première pensée est que les nouveaux objets, pas de maison, une nouvelle, pas de petite amie, un nouveau et plus encore bon. L'objet est établi entre la nouvelle classe et la relation de couplage, s'il y a beaucoup d'objets, entre les classes et les objets pour former un couplage fort, la flexibilité se détériore, donc, en général, nous sommes confrontés dans le processus de développement « Interface » la programmation par le polymorphisme, cette interface peut être mis en œuvre avec une nouvelle classe. Cependant, le même code est trop grand, vous le faire fonctionner! Donc, en plus de nouvelles, vous aurez pas d'autre façon de le faire? Cela implique la conception des modèles de conception:

Les utilisateurs spécifient le type à créer dans la classe de test:

Nous regardons le diagramme de classes:
Insérer ici l'image Description

Description: classe Pizza est une classe abstraite, puis Hériter Pizza CheesePizza et la classe ClamPizza et passer outre la méthode préparer, puis, pour créer spécifié en fonction du type de pizza dans l'usine de simples SimpleFactory puis combiné à PizzStore dans SimpleFactory, ce que l'utilisateur veut Pizza, en Pizzeria dit, alors laissez SimpleFactory faire un type déterminé, qui est lui-même de ne pas se préoccuper de ce type de Pizza. Quelle que soit la pizza finale doit cuire, couper, fonctionnement de la boîte, après SimpleFactory fini de créer Pizza, cuire au four de mise en œuvre Pizzeria, coupé, boîte. Bien sûr, il y aura des étudiants demandent, si l'on ajoute une sorte de pizza, alors nous pouvons ajouter SimpleFactory pour entrer, faire le principe « ouvert pour l'extension, mais fermée pour la modification » ocp une bouchée! Regardons au processus de mise en œuvre spécifique

  • Pizza
public abstract class Pizza {

    private String name;
    public abstract void prepare();

    public void bake(){
        System.out.println(name+ "  "+ "backing");
    }
    public void cut(){
        System.out.println(name+ "  "+ "cutting");
    }
    public void box(){
        System.out.println(name+ "  "+ "boxing");
    }

    public void setName(String name) {
        this.name = name;
    }

}
  • ClamPizza
public class ClamPizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("加入ClamPizza调料");
    }
}
  • Pizza au fromage
public class CheesePizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("加入CheesePizza调料");
    }
}

  • SimpleFactory
public  class SimpleFactory {

    public Pizza createPizza(String type){
        Pizza pizza = null;

        if (type.equals("Clam")){
            pizza = new ClamPizza();
            pizza.setName(type);
        }else if (type.equals("Cheese")){
            pizza = new CheesePizza();
            pizza.setName(type);
        }
        return pizza;
    }
}
  • Pizzeria
public class PizzaStore {

    SimpleFactory simpleFactory;

    public void setSimpleFactory(SimpleFactory simpleFactory) {
        this.simpleFactory = simpleFactory;
    }

    public Pizza orderPizza(String type, SimpleFactory simpleFactory){
        Pizza pizza;

        pizza = simpleFactory.createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;

    }
}
  • TestPizza
public class TestPizza {
    public static void main(String[] args) {

        //新建一个PizzaStore用来卖Pizza
        PizzaStore pizzaStore = new PizzaStore();

        //传入要买的类型,并且要有一个工厂
        pizzaStore.orderPizza("Clam",new SimpleFactory());
    }
}
  • Résultats des tests
    Insérer ici l'image Description

Le type d'utilisateurs de la console pour créer l'entrée dynamique:

1) Il existe deux types de pizza: Pizza, Grèce (grec), pizza au fromage (fromage)
2) de production de pizza il BAK, Couper, Boîte,
3) Etant donné un type de processus de création de pizza

  • Pizza
//定义一个抽象的披萨类
public abstract  class Pizza {
	
	//抽象方法
    public abstract void prepare();

	//制做的工艺
    public void bake() {
        System.out.println("baking;");
    }

    public void cut() {
        System.out.println("cuting;");
    }

    public void box() {
        System.out.println("boxing;");
    }

}
  • CheesePizza2
public class CheesePizza2 extends Pizza {
    @Override
    public void prepare() {
        System.out.println("给奶酪披萨准备原材料");
    }
}

  • GreekPizza2
public class GreekPizza2 extends Pizza{
    @Override
    public void prepare() {
        System.out.println("给希腊披萨准备原材料");
    }
}

  • orderPizza2
public class orderPizza2 {

    Pizza pizza = null;

    public Pizza orderPizza(String orderType){

        if (orderType.equals("greek")){
            pizza = new GreekPizza2();
        }else if (orderType.equals("cheese")){
            pizza = new CheesePizza2();
        }

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;

    }
}

  • Pizzeria
public class PizzaStore {
    public static void main(String[] args) {

        orderPizza2 orderPizza2 = new orderPizza2();
        orderPizza2.orderPizza("greek");
        orderPizza2.orderPizza("cheese");

    }
}
  • test

Insérer ici l'image Description

  • Il y a des diagrammes de classes
    Insérer ici l'image Description

Alors que nous nous rendons compte de la fonction, mais quand on ajoute une sorte de pizza, qui est nécessaire orderPizza2 ajouter, si nous pouvons orderPizza2 l'intérieur tiré selon le nom de la méthode pour créer une sorte de pizza, une nouvelle méthode, conçue pour créer un objet, puis polymérisé à l'intérieur orderPizza2 cette nouvelle façon de le faire, il sera ouvert pour l'extension, mais fermée pour la modification pour répondre aux principes ocp, allé de l'avant!

  • Pizza
public abstract  class Pizza {

    public abstract void prepare();

    public void bake() {
        System.out.println("baking;");
    }

    public void cut() {
        System.out.println("cuting;");
    }

    public void box() {
        System.out.println("boxing;");
    }

}
  • CheesePizza2
public class CheesePizza2 extends Pizza {
    @Override
    public void prepare() {
        System.out.println("经制做奶酪披萨准备原材料");
    }
}
  • GreekPizza2
public class GreekPizza2 extends Pizza{
    @Override
    public void prepare() {
        System.out.println("给希腊披萨准备原材料");
    }
}

  • SimpleFactory2
public class SimpleFactory2 {

    public Pizza createPizza(String orderType){

        Pizza pizza = null;

        if (orderType.equals("greek")){
            pizza = new GreekPizza2();
        }else if (orderType.equals("cheese")){
            pizza = new CheesePizza2();
        }

        return pizza;
    }

}
  • OrderPizza2
//定义一个生成厂商,对传入的某种披萨进行prepare,bake,cut,box操作
public class orderPizza2 {

    SimpleFactory2 simpleFactory2;

    Pizza pizza = null;

    public orderPizza2(SimpleFactory2 simpleFactory2) {
        setSimpleFactory2(simpleFactory2);
    }

    public void  setSimpleFactory2(SimpleFactory2 simpleFactory2) {

        this.simpleFactory2 = simpleFactory2;

        //获取披萨的类型是什么
        String orderType = " ";
        orderType = getype();

        pizza = simpleFactory2.createPizza(orderType);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

    }

    //写一个方法,可以获取客户端希望订购的披萨种类
    private String getype(){
        try {
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input Pizza type:");
            String str = strin.readLine();
            return str;
        }catch (IOException e){
            e.printStackTrace();
            return "";
        }
    }
}
  • Pizzeria
public class PizzaStore {

    public static void main(String[] args) {

        new orderPizza2(new SimpleFactory2());
    }
}
  • résultat

Insérer ici l'image Description

  • classe représente la figure
    Insérer ici l'image Description

Dans le cas de la pizza, nous utilisons une usine pour créer une pizza en fonction du type, nous rendons compte préparer, cuire, couper, à l'intérieur le fonctionnement de la boîte de OrderPizza2, si vous souhaitez ajouter un nouveau type de pizza, juste dans la classe d'usine méthode de jointure, d'autres codes ne changent pas, réalisant ainsi le but de simplifier le code!

Dans cet article, une connaissance de base des diagrammes de classes UML, s'il ne sont pas claires peut se référer à:

UML bonne façon de manger ---- solution positive! !

Si vous pensez qu'il ya un problème, vous pouvez être écrit dans la zone de commentaires!

Publié 47 articles originaux · a gagné les éloges 34 · vues 8862

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42893085/article/details/105309872
conseillé
Classement