zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    1、抽象工厂模式:依赖生产产品族的全部产品,他可以支持产品族的增加。

    2.抽象工厂是工厂模式的升级版,有许多的业务品种的时候,业务分类,通过抽象工厂模式产生需要的对象是一种好的解决方案。

    3.代码实现及其分析

      ·我们以生产汽车为例,进行分析,首先我们需要创建汽车,要创建发动机,座椅等,然后将其组装成一个汽车。下来开始案例。

    (1)我们首先创建一个发动机

      第一步:创建抽象类,然后实现方法,创建各自的实现

    package kw.test.cxgcms;
    
    /*
     * 发动机接口
     */
    public interface Engine {
        public void run();
        
        public void start();    
    }

    第二步实现类

    package kw.test.cxgcms;
    
    /*
     * 好的发动机
     */
    public class GoodEngine implements Engine{
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println("run is fast!");
        }
    
        @Override
        public void start() {
            // TODO Auto-generated method stub
            System.out.println(" fast!");
        }
    
    }
    package kw.test.cxgcms;
    
    /*
     * 差发动机
     */
    public class BadEngine implements Engine{
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println("run is slow!");
        }
    
        @Override
        public void start() {
            // TODO Auto-generated method stub
            System.out.println("slow!");
        }
    
    }

    (2)创建椅子

    第一步:

    package kw.test.cxgcms;
    
    public interface Seat {
        public void sitting();
    
    }

    第二步:

    package kw.test.cxgcms;
    
    public class GoodSeat implements Seat{
    
        @Override
        public void sitting() {
            // TODO Auto-generated method stub
            System.out.println("soft");
        }
    
    }
    package kw.test.cxgcms;
    
    public class BadSeat implements Seat{
    
        @Override
        public void sitting() {
            // TODO Auto-generated method stub
            System.out.println("badly");
        }
    
    }

    组件都已经创建好了,下来开始组装汽车

    package kw.test.cxgcms;
    
    public interface CarZJFactory {
        public Engine getEngine();
        public Seat getSeat();
        
    
    }

    其他的根据组装的方法,进行组装成自己的汽车

    package kw.test.cxgcms;
    
    public class BadCarFactory implements CarZJFactory{
    
        @Override
        public Engine getEngine() {
            // TODO Auto-generated method stub
            return new BadEngine();
        }
    
        @Override
        public Seat getSeat() {
            // TODO Auto-generated method stub
            return new BadSeat();
        }
    
    }
    package kw.test.cxgcms;
    
    public class GoodCarFactory implements CarZJFactory{
    
        @Override
        public Engine getEngine() {
            // TODO Auto-generated method stub
            return new GoodEngine();
        }
    
        @Override
        public Seat getSeat() {
            // TODO Auto-generated method stub
            return new GoodSeat();
        }
    
    }

    4.三种工厂方法的优缺点。

      `简单工厂模式:虽然不符合设计原则,实际中用的最多。

      ·工厂方法模式:不修改已有的类,通过工厂增加实现的扩展。

      ·抽象工厂模式:不增加产品,可以增加产品族。

  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/kw28188151/p/8567381.html
Copyright © 2011-2022 走看看