zoukankan      html  css  js  c++  java
  • 秒懂设计模式--工厂模式

    简单工厂模式

    一个抽象的接口,多个抽象接口的实现类,一个工厂类,用来实例化抽象的接口

    // 抽象产品类
    abstract class Car {
       public void run();

       public void stop();
    }

    // 具体实现类
    class Benz implements Car {
       public void run() {
           System.out.println("Benz开始启动了。。。。。");
       }

       public void stop() {
           System.out.println("Benz停车了。。。。。");
       }
    }

    class Ford implements Car {
       public void run() {
           System.out.println("Ford开始启动了。。。");
       }

       public void stop() {
           System.out.println("Ford停车了。。。。");
       }
    }

    // 工厂类
    class Factory {
       public static Car getCarInstance(String type) {
           Car c = null;
           if ("Benz".equals(type)) {
               c = new Benz();
           }
           if ("Ford".equals(type)) {
               c = new Ford();
           }
           return c;
       }
    }

    public class Test {

       public static void main(String[] args) {
           Car c = Factory.getCarInstance("Benz");
           if (c != null) {
               c.run();
               c.stop();
           } else {
               System.out.println("造不了这种汽车。。。");
           }

       }

    }

    工厂方法模式

    有四个角色,抽象工厂模式,具体工厂模式,抽象产品模式,具体产品模式。不再是由一个工厂类去实例化具体的产品,而是由抽象工厂的子类去实例化产品

    // 抽象产品角色
    public interface Moveable {
       void run();
    }

    // 具体产品角色
    public class Plane implements Moveable {
       @Override
       public void run() {
           System.out.println("plane....");
       }
    }

    public class Broom implements Moveable {
       @Override
       public void run() {
           System.out.println("broom.....");
       }
    }

    // 抽象工厂
    public abstract class VehicleFactory {
       abstract Moveable create();
    }

    // 具体工厂
    public class PlaneFactory extends VehicleFactory {
       public Moveable create() {
           return new Plane();
       }
    }

    public class BroomFactory extends VehicleFactory {
       public Moveable create() {
           return new Broom();
       }
    }

    // 测试类
    public class Test {
       public static void main(String[] args) {
           VehicleFactory factory = new BroomFactory();
           Moveable m = factory.create();
           m.run();
       }
    }

    抽象工厂模式

    与工厂方法模式不同的是,工厂方法模式中的工厂只生产单一的产品,而抽象工厂模式中的工厂生产多个产品

    /抽象工厂类
    public abstract class AbstractFactory {
       public abstract Vehicle createVehicle();
       public abstract Weapon createWeapon();
       public abstract Food createFood();
    }
    //具体工厂类,其中Food,Vehicle,Weapon是抽象类,
    public class DefaultFactory extends AbstractFactory{
       @Override
       public Food createFood() {
           return new Apple();
       }
       @Override
       public Vehicle createVehicle() {
           return new Car();
       }
       @Override
       public Weapon createWeapon() {
           return new AK47();
       }
    }
    //测试类
    public class Test {
       public static void main(String[] args) {
           AbstractFactory f = new DefaultFactory();
           Vehicle v = f.createVehicle();
           v.run();
           Weapon w = f.createWeapon();
           w.shoot();
           Food a = f.createFood();
           a.printName();
       }
    }
  • 相关阅读:
    大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
    大数据技术之_16_Scala学习_03_运算符+程序流程控制
    大数据技术之_16_Scala学习_01_Scala 语言概述
    通过创建一个简单的骰子游戏来探究 Python
    在Linux系统中创建SSH服务器别名
    DNS原理及劫持问题
    详细介绍:Kubernetes1.4版本的新功能
    Linux系统中五款好用的日志分析工具
    wc命令——Linux系统高效数据统计工具
    Linux系统内核正式进入5.0版本时代
  • 原文地址:https://www.cnblogs.com/wuwuyong/p/12470258.html
Copyright © 2011-2022 走看看