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();
       }
    }
  • 相关阅读:
    Windows编程--线程的睡眠方式
    Windows编程-- 等待函数
    Windows编程--线程的切换
    Windows编程-- 用户方式中线程的同步关键代码段(临界区)
    Windows编程--挂起和恢复线程的运行
    Windows编程-- 用户方式中线程的同步原子访问:互锁的函数家族
    Windows编程--线程之GetExitCodeThread()
    Windows编程-- 对Critical Section的封装
    Windows编程--线程的身份标识
    如何在oracle中限制返回结果集的大小
  • 原文地址:https://www.cnblogs.com/wuwuyong/p/12470258.html
Copyright © 2011-2022 走看看