zoukankan      html  css  js  c++  java
  • 设计模式(四) Factory Pattern工厂模式

    核心:

    实例化对象,实现创建者和调用者的分离

    简单工厂模式

    工厂方法模式

    抽象工厂模式

    面对对象设计的基本原则:

    ocp(open closed principle) 开闭原则:一个软件的实体应当对拓展开放,对修改关闭

    dip(dependence inversion principle) 依赖反转原则:针对接口编程,不要针对实现编程

    lod(law of demeter) demeter法则:只与你直接的朋友通信,避免与陌生人通信

    简单工厂模式(Simple Factory Pattern):

    public class Car {
    
    }
    
    public class Byd extends Car{
    
    }
    
    public class Audi extends Car{
    
    }
    
    public class CarFactory {
        public static Car createCar(String type){
            if("audi".equals(type)){
                return new Audi();
            }else if("byd".equals(type)){
                 return new Byd();
            }else return null;
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Car c=CarFactory.createCar("奥迪");
            
        }
    }

    UML图:

     由于上述方法未实现开闭原则,则引入工厂方法模式(FactoryMethod)

    工厂方法模式(Factory Method Pattern):

    public class Car {
    
    }
    
    public class Audi extends Car{
    
    }
    
    public class Byd extends Car{
    
    }
    
    public interface CarFactory {
        Car createCar();
    }
    
    
    public class AudiFactory implements CarFactory{
    
        @Override
        public Car createCar() {
            return new Audi();
        }
    
    }
    
    public class BydFactory implements CarFactory{
    
        @Override
        public Car createCar() {
            return new Byd();
        }
    
    }
    
    public class Client {
        public static void main(String[] args) {
            Car c1=new AudiFactory().createCar();
            Car c2=new BydFactory().createCar();
        }
    }

    UML图:

    结构复杂,但是但是容易扩展

    抽象工厂模式(Abstract Factory Pattern):

    产品族:用来生产不同产品族的全部产品

    package com.littlepage.factoryPattern.abstractFactory;
    
    public interface Engine {
        void run();
        void start();
    }
    
    class LuxuryEngine implements Engine{
    
        @Override
        public void run() {
            System.out.println("启动快");
        }
    
        @Override
        public void start() {
            System.out.println("开始快");
        }
        
    }
    
    class LowEngine implements Engine{
    
        @Override
        public void run() {
            System.out.println("启动慢");
        }
    
        @Override
        public void start() {
            System.out.println("开始慢");
        }
        
    }
    
    package com.littlepage.factoryPattern.abstractFactory;
    
    public interface Seats {
        void massage();
    }
    
    class LuxurySeat implements Seats {
    
        @Override
        public void massage() {
            System.out.println("自动按摩");
        }
    
    }
    
    class LowSeat implements Seats {
    
        @Override
        public void massage() {
            System.out.println("手动按摩");
        }
    
    }
    package com.littlepage.factoryPattern.abstractFactory;
    
    public interface Tyre {
        void revolve();
    }
    
    class LuxuryTyre implements Tyre{
    
        @Override
        public void revolve() {
            System.out.println("旋转快");
        }
        
    }
    
    class LowTyre implements Tyre{
    
        @Override
        public void revolve() {
            System.out.println("旋转慢");
        }
        
    }
    package com.littlepage.factoryPattern.abstractFactory;
    
    public interface CarFactory {
        Engine createEngine();
        Seats createSeat();
        Tyre createTyre();
    }
    
    class LuxuryCarFactory implements CarFactory{
    
        @Override
        public Engine createEngine() {
            return new LuxuryEngine();
        }
    
        @Override
        public Seats createSeat() {
            return new LuxurySeat();
        }
    
        @Override
        public Tyre createTyre() {
            return new LuxuryTyre();
        }
    
        
        
    }
    
    class LowCarFactory implements CarFactory{
    
        @Override
        public Engine createEngine() {
            return new LowEngine();
        }
    
        @Override
        public Seats createSeat() {
            return new LowSeat();
        }
    
        @Override
        public Tyre createTyre() {
            return new LowTyre();
        }
    
        
        
    }
    package com.littlepage.factoryPattern.abstractFactory;
    
    public class Client {
        public static void main(String[] args) {
            CarFactory factory=new LuxuryCarFactory();
            Engine e=factory.createEngine();
            e.start();
        }
    }

    UML图(按照层级来看):

  • 相关阅读:
    NEC 框架规范 css reset
    NEC 工程师规范
    NEC html规范
    【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧
    【bzoj1562】【[NOI2009]变换序列】匈牙利算法的性质利用
    【bzoj4808】【马】二分图最大点独立集+简单感性证明
    【hdu1150】【Machine Schedule】二分图最小点覆盖+简单感性证明
    【bzoj4950】【 [Wf2017]Mission Improbable】贪心+二分图匹配
    【bzoj4443】【[Scoi2015]小凸玩矩阵】二分+二分图最大匹配
    【bzoj1977】【严格次小生成树】倍增维护链上最大次大值
  • 原文地址:https://www.cnblogs.com/littlepage/p/9986858.html
Copyright © 2011-2022 走看看