• 工厂方法模式


    今天把之前在纸上写的一些草稿写到博客上面来,这样记录一下自己以前的学习历程。

    简单工厂模式

    工厂方法模式

    抽象工厂模式

    部分内容摘自http://www.cnblogs.com/yinrq/p/5280616.html

    如有冒犯请联系我。

    下面具体说说简单工厂模式:

    简单工厂模式(Simple Factory Pattern):简单工厂又称为静态工厂方法(Static Factory Method)模式。它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都有共同的父类。

    简单工厂模式包括三个角色:抽象产品角色,具体产品角色,工厂角色。

    package com.sei.ecnu.simpleFactory;
    
    public interface Car {
        
        void gotowork();
    
    }
    package com.sei.ecnu.simpleFactory;
    
    public class Bike implements Car{
    
        @Override
        public void gotowork() {
            System.out.println("骑自行车去上班!");
            
        }
    
    }
    package com.sei.ecnu.simpleFactory;
    
    public class Bus implements Car{
    
        @Override
        public void gotowork() {
            System.out.println("坐公交车去上班!");
        }
        
    
    }
    package com.sei.ecnu.simpleFactory;
    
    
    public class SimpleFactory {
        
        public enum CarType{
            BIKE,BUS;
        }
        
        public static Car getCar(CarType car){
            Car simpleCar = null;
            switch(car){
            case BIKE:
                simpleCar = new Bike();
                break;
            case BUS:
                simpleCar = new Bus();
                break;
            default:
                simpleCar = new Bike();
            }
            
            return simpleCar;
        }
    
    }
    package com.sei.ecnu.simpleFactory;
    
    import org.junit.Test;
    
    import com.sei.ecnu.simpleFactory.SimpleFactory.CarType;
    
    public class TestSimple {
        
        @Test
        public void test(){
            Car car = SimpleFactory.getCar(CarType.BIKE);
            System.out.println("上班方式:");
            car.gotowork();
            
            Car car2 = SimpleFactory.getCar(CarType.BUS);
            System.out.println("上班方式:");
            car2.gotowork();
        }
    
    }

    下面说说工厂方法模式:

    工厂方法模式也叫工厂模式,属于类创建模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂负责创建具体的产品对象。

    目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个具体对象。工厂方法模式包含四个部分:

    1.抽象产品:产品对象同一的基类,或者是同一的接口。

    2.具体的产品:各个不同的实例对象类

    3.抽象工厂:所有的子类工厂类的基类,或者是同一的接口

    4.具体的工厂子类:负责每个不同的产品对象的事迹创建

    代码实现如下:

    package com.sei.ecnu;
    
    public interface Car {
        
        void gotowork();
    
    }
    package com.sei.ecnu;
    
    public class Bike implements Car{
    
        @Override
        public void gotowork() {
            System.out.println("骑自行车去上班!");
            
        }
    
    }
    package com.sei.ecnu;
    
    public class Bus implements Car{
    
        @Override
        public void gotowork() {
            System.out.println("开车去上班!");
            
        }
    
    }
    package com.sei.ecnu;
    
    public interface ICarFactory {
        
        Car getCar();
    
    }
    package com.sei.ecnu;
    
    public class BikeFactory implements ICarFactory{
    
        @Override
        public Car getCar() {
            
            return new Bike();
        }
    
    }
    package com.sei.ecnu;
    
    public class BusFactory implements ICarFactory{
    
        @Override
        public Car getCar() {
            
            return new Bus();
        }
    
    }
    package com.sei.ecnu;
    
    import org.junit.Test;
    
    public class TestFactory {
        
        @Test
        public void test(){
            ICarFactory factory = null;
            //bike
            factory = new BikeFactory();
            Car bike = factory.getCar();
            bike.gotowork();
            
            //bus
            factory = new BusFactory();
            Car bus = factory.getCar();
            bus.gotowork();
        }
    
    }

    下面在说一说抽象工厂模式:

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定他们的具体实现类,具体的实现分别在子类工厂中产生。

    类似于工厂模式:隔离了具体的生产实现,使得替换具体的工厂实现类很容易。包含有一下模块:

    1.抽象产品接口:定义产品的接口,公共的爆漏方法。便于实际的产品类实现。

    2.具体的产品类:包含实际产品的类的逻辑处理;

    3.抽象工厂接口:定义产生系列对象的接口

    4.具体的工厂实现:实现抽象的接口工厂,返回具体的产品类的实现。

    下面是具体的代码示例:

    package com.sei.ecnu.abstractFactory;
    
    public interface Car {
        
        void gotowork();
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public class Bike implements Car{
    
        @Override
        public void gotowork() {
            System.out.println("骑自行车去上班!");
            
        }
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public class Bus implements Car{
    
        @Override
        public void gotowork() {
            System.out.println("坐公交车去上班!");
            
        }
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public interface IBreakFast {
        
        void eat();
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public class Milk implements IBreakFast{
    
        @Override
        public void eat() {
            System.out.println("喝牛奶!");
            
        }
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public class Orange implements IBreakFast {
    
        @Override
        public void eat() {
            System.out.println("吃橘子!");
    
        }
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public interface IAbstractFactory {
        
        Car getCar();
        
        IBreakFast getBreakFast();
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public class LowPersonFactory implements IAbstractFactory{
    
        @Override
        public Car getCar() {
            
            return new Bike();
        }
    
        @Override
        public IBreakFast getBreakFast() {
            
            return new Orange();
        }
    
    }
    package com.sei.ecnu.abstractFactory;
    
    public class HighPersonFactory implements IAbstractFactory{
    
        @Override
        public Car getCar() {
            
            return new Bus();
        }
    
        @Override
        public IBreakFast getBreakFast() {
            
            return new Milk();
        }
    
    }
    import org.junit.Test;
    
    public class AbstractFactoryTest {
        @Test
        public void test(){
            IAbstractFactory factory = new LowPersonFactory();
            Car car = factory.getCar();
            IBreakFast breakFast = factory.getBreakFast();
            System.out.println("吃的早饭是:");
            breakFast.eat();
            System.out.println("上班的交通工具是:");
            car.gotowork();
            
            IAbstractFactory factory2 = new HighPersonFactory();
            Car car2 = factory2.getCar();
            IBreakFast breakFast2 = factory2.getBreakFast();
            System.out.println("吃的早饭是:");
            breakFast2.eat();
            System.out.println("上班的交通工具:");
            car2.gotowork();
        }
    
    }

    输出结果:

    吃的早饭是:
    吃橘子!
    上班的交通工具是:
    骑自行车去上班!
    吃的早饭是:
    喝牛奶!
    上班的交通工具:
    坐公交车去上班!

  • 相关阅读:
    openerp domain 規則
    openerp创建动态视图-fields_view_get
    postgres时间转换函数
    UG NX9.0.0 for linux安装
    OpenERP 源码变更后数据库升级
    在Ubuntu 12 服务器上源码安装 OpenERP 8.0
    OpenERP7.0中非admin帐号新增其它用户问题
    有关WINDOWS XP登录密码的几种方法
    OpenERP对象字段定义的详解
    Openerp workflow 工作流批注模块
  • 原文地址:https://www.cnblogs.com/LoganChen/p/8297089.html
Copyright © 2020-2023  润新知