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();
       }
    }
  • 相关阅读:
    【一周读书】哲学家,你们都干了些什么?
    我的软件工程课目标
    【一周读书】《把时间当作朋友》《一个人就是一支骑兵》读书心得
    LANMP安全配置学习之PHP安全配置
    XXE漏洞学习
    利用bWAPP学习SSRF
    Vulnhub靶场之DC-1
    74CMS4.1.2.4版本黑盒测试
    业务逻辑漏洞——浅谈验证码漏洞
    bWAPP靶场之HTML Injection(GET)
  • 原文地址:https://www.cnblogs.com/wuwuyong/p/12470258.html
Copyright © 2011-2022 走看看