设计模式-创建型模式-抽象工厂

创建型模式:抽象了实例化过程,它们帮助一个系统如何独立于如何创建、组合和表示它的哪些对象。一个创建型模式使用了继承改变实例化的类,而一个对象的实例化将委托给别一个对象来现实。

Abstract Factory模式:

1、一个系统要独立于它的产品的创建、组合和表示时。

2、一个系统要由多个产品系例中的一个配制时。

3、强调一系例产品对象的相关设计以便进行联合使用。

4、当你提供一个产品库时,你只想显示他的接口不想显示他的实现。

 

代码:

package abstractFactory;
/*
 * AbstractFactory
 */
public abstract  class Room  {
    public abstract Wall makeWall();
    public abstract Door makeDoor();
}package abstractFactory;
/*
 * The Abstract Class of Door
 */
public abstract class Door  {
    //private Door door;
    public abstract String getName() ;
}

 

package abstractFactory;
/*
 * The Abstract Class of Wall
 */
public abstract class Wall  {
    //private Wall wall;
    public abstract String getName();
}

 package abstractFactory;
/*
 * A concrete Room - BedRoom
 */
public class BedRoom  extends Room {
    public BedRoom() {
        System.out.println("Initiated a bedroom !");
    }
    public Door makeDoor() {
        return new BedRoomDoor();
    }
    public Wall makeWall() {
        return new BedRoomWall();
    }
}

 

package abstractFactory;
/*
 * A concrete Door for Bed Room
 */
public class BedRoomDoor extends Door {
    private String doorName;
    public BedRoomDoor() {
        doorName = "BedRoomDoor";
    }
    public String getName() {
        return doorName;
    }
}

 

package abstractFactory;
/*
 * A concrete Wall for Living Room
 */
public class BedRoomWall extends Wall {
    private String wallName;
    public BedRoomWall() {
        wallName = "BedRoomWall";
    }
    public String getName() {
        return wallName;
    }
}

 

package abstractFactory;
/*
 * A concrete Room - LivingRoom
 */
public class LivingRoom  extends Room {
    public LivingRoom() {
        System.out.println("Initiated a living room !");
    }
    public Door makeDoor() {
        return new LivingRoomDoor();
    }
    public Wall makeWall() {
        return new LivingRoomWall();
    }
}

package abstractFactory;
/*
 * A concrete Door for Living Room
 */
public class LivingRoomDoor extends Door {
    private String doorName;
    public LivingRoomDoor() {
        doorName = "LivingRoomDoor";
    }
    public String getName() {
        return doorName;
    }
}

 

package abstractFactory;
/*
 * A concrete Wall for Living Room
 */
public class LivingRoomWall  extends Wall {
    private String wallName;
    public LivingRoomWall() {
        wallName = "LivingRoomWall";
    }
    public String getName() {
        return wallName;
    }
}

 

public class RoomMaker  {
    public Room CreateRoom(String roomType) {
        if(roomType.equals("LivingRoom")) {
            return new LivingRoom();
        } else if(roomType.equals("BedRoom")) {
            return new BedRoom();
        } else {
            return new LivingRoom();
        }
    }

    public static void main(String[] args) {
        RoomMaker myMaker = new RoomMaker();
        //-----  Create Living Room
        Room myLivingRoom = myMaker.CreateRoom("LivingRoom");
        //-----  Create a door in living room
        Door livingDoor = myLivingRoom.makeDoor();
        System.out.println("Living room door name is:" + livingDoor.getName() );
        //-----  Create a wall in living room
        Wall livingWall = myLivingRoom.makeWall();
        System.out.println("Living room wall name is:" + livingWall.getName() );

        //-----  Create Bed Room
        Room myBedRoom = myMaker.CreateRoom("BedRoom");
        //-----  Create a door in bedroom
        Door BedDoor = myBedRoom.makeDoor();
        System.out.println("Bed room door name is:" + BedDoor.getName() );
        //-----  Create a wall in bedroom
        Wall BedWall = myBedRoom.makeWall();
        System.out.println("Bed room wall name is:" + BedWall.getName() );

    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值