zoukankan      html  css  js  c++  java
  • 设计模式(二)

    工厂方法模式

    1、模式结构

    工厂方法模式组成部分:

    ①抽象工厂:提供创建产品的接口,调用者通过访问具体工厂的工厂方法newProduct()来完成产品的创建;

    ②具体工厂:实现抽象工厂的抽象方法,完成具体产品的创建;

    ③抽象产品:定义的产品的属性和功能;

    ④具体产品:实现了抽象产品的接口,由具体工厂负责创建。

    工厂方法模式的主要优点有:

    • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
    • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;
    • 每个具体工厂只负责一个对应产品的生产。

    工厂模式的实现示例代码:

    package newcoder.FactoryDesignModel;
    interface abstractFactory{ // 抽象工厂
        public abstractProduct newProduct();
    }
    interface abstractProduct{ // 抽象产品
        public void show();
    }
    class concreteProduct1 implements abstractProduct{
        // 具体产品
        public concreteProduct1(){
            System.out.println("concreteProduct1被创建");
        }
        public void show(){
            System.out.println("展示产品1");
        }
    }
    class concreteProduct2 implements abstractProduct{
        // 具体产品
        public concreteProduct2(){
            System.out.println("concreteProduct2被创建");
        }
        public void show(){
            System.out.println("展示产品2");
        }
    }
    class concreteFactory1 implements abstractFactory{
        // 具体工厂
        public abstractProduct newProduct(){
            return new concreteProduct1();
        }
    }
    class concreteFactory2 implements abstractFactory{
        // 具体工厂
        public abstractProduct newProduct(){
            return new concreteProduct2();
        }
    }
    public class FactoryTest {
        public static void main(String args[]){
            abstractFactory f1 = new concreteFactory1();
            abstractProduct a = f1.newProduct();
            a.show();
            abstractFactory f2 = new concreteFactory2();
            abstractProduct b = f2.newProduct();
            b.show();
        }
    }

    抽象工厂方法

    工厂方法模式中,只考虑生产同级的产品,抽象工厂模式将考虑多等级产品的生产。在一个工厂中,不仅能够生产洗衣机,也可以生产空调。

    1、模式的结构

    ①抽象工厂:提供创建产品的接口,调用者通过访问具体工厂的工厂方法newProduct()来完成产品的创建;

    ②具体工厂:实现抽象工厂的抽象方法,完成具体产品的创建;

    ③抽象产品:定义的产品的属性和功能;

    ④具体产品:实现了抽象产品的接口,由具体工厂负责创建。同具体工厂之间的关系是多对一。

     抽象工厂模式实现的示例代码:

    package newcoder.FactoryDesignModel;
    interface ABstractFactory{
        public electrictProduct newelectrictProduct();
        public smartProduct newsmartProduct();
    }
    interface electrictProduct{
        public void show1();
    }
    interface smartProduct{
        public void show2();
    }
    class computer implements smartProduct{
        public computer(){
            System.out.println("电脑被生产了");
        }
        public void show2(){
            System.out.println("展示电脑");
        }
    }
    class phone implements smartProduct{
        public phone(){
            System.out.println("手机被生产了");
        }
        public void show2(){
            System.out.println("展示手机");
        }
    }
    class airCondition implements electrictProduct{
        public airCondition(){
            System.out.println("空调被生产了");
        }
        public void show1(){
            System.out.println("展示空调");
        }
    }
    class cleaMechanic implements electrictProduct{
        public cleaMechanic(){
            System.out.println("洗衣机被生产了");
        }
        public void show1(){
            System.out.println("展示洗衣机");
        }
    }
    class haierFactory implements ABstractFactory{
        public electrictProduct newelectrictProduct(){
            return new airCondition();
        }
        public smartProduct newsmartProduct(){
            return new phone();
        }
    
    }
    class geliFactory implements ABstractFactory{
        public electrictProduct newelectrictProduct(){
            return new cleaMechanic();
        }
        public smartProduct newsmartProduct(){
            return new computer();
        }
    }
    public class Test {
        public static void main(String args[]){
            ABstractFactory f1 = new haierFactory();
            ABstractFactory f2 = new geliFactory();
            electrictProduct a = f1.newelectrictProduct();
            smartProduct b = f1.newsmartProduct();
            electrictProduct c = f2.newelectrictProduct();
            smartProduct d = f2.newsmartProduct();
        }
    }
  • 相关阅读:
    Luogu P1131 时态同步
    Codeforces Round #507 B. Shashlik Cooking
    Codeforces Round #507 A. Palindrome Dance
    Luogu P3818 小A和uim之dark♂逃离 Ⅱ
    Luogu P1373 小a和uim之dark♂逃离 Ⅰ
    Luogu P4822 [BJWC2012]冻结
    Luogu P2575 高手过招(博弈论)
    Luogu P1074靶形数独
    Luogu P2323「皇后游戏」
    GodFly的寻宝之旅·状压DP
  • 原文地址:https://www.cnblogs.com/xxyxt/p/11466557.html
Copyright © 2011-2022 走看看