软件设计——学习简单工厂

【实验学习笔记】
一、理解简单工厂模式,根据UML图写出通用代码
在这里插入图片描述

abstract class Product{
    public String productName;
    public String productID;
    public Product(String name, String id){
        this.productName = name;
        this.productID = id;
    }
    public abstract void SomeProductMethod();
}
class ConcreteProduct1 extends Product{
    ConcreteProduct1(String name, String id){
        super(name, id);
    }
    public void SomeProductMethod(){
    }
}
class ConcreteProduct2 extends Product{
    ConcreteProduct2(String name, String id){
        super(name, id);
    }
    public void SomeProductMethod(){
    }
}
class Factory{
    public Product createProduct(String productName){
    if(productName == "pd1"){
            return new ConcreteProduct1(productName, "");
        }
        if(productName == "pd2"){
            return new ConcreteProduct2(productName, "");
        }
        return null;
        }
}
class Test{
    public static void main(String[] args) {
        //以前的实现形式
        ConcreteProduct1 cp1 = new ConcreteProduct1("p1", "1123");
        }
}

二、现假设要开发一种画图程序,该画图程序拥有不同粗细的笔,能利用不同粗细的笔画出不同的形状,这里假设笔的粗细度分为:12MM, 10MM, 8MM, 6MM,假设可绘制的形状为:三角形,圆形,矩形,星形,请利用简单工厂设计并开发该画图程序,给出原型代码。

//第一种情况,假设笔需要知道到画的是什么形状
abstract class Pen{
    public abstract void createPen();
        //是一个利用DC创建笔的过程,每一种笔创建方式不一样
        //需要子类自己实现
    public void Draw(Shape s){
        //绘制形状
        s.Draw(this);
    }
}
class Pen12MM extends Pen{
    public void createPen(){
        //创建了一只12mm的笔
    }
}
class Pen10MM extends Pen{
    public void createPen(){
        //创建了一只10mm的笔
    }
}
abstract class Shape{
    public abstract void Draw(Pen p);
}
class Triangle extends Shape{
    public void Draw(Pen p){
        //三角形   
        //需要使用p去完成一些绘制工作
    }
}
class Rectangle extends Shape{
    public void Draw(Pen p){
        //矩形   
    }
}
class ShapeFactory{
    public static Shape createShape(String shapeName){
        switch(shapeName){
            case "RECT":
                return new Rectangle();
            case "TRAIN":
                return new Triangle();
            default:
                return null;
        }
    }
}
class PenFactory{
    public static Pen createShape(String penName){
        switch(penName){
            case "12mm":
                return new Pen12MM();
            case "10mm":
                return new Pen10MM();
            default:
                return null;
        }
    }
}
// Pen p = new Pen12MM();
// p.Draw(new ShapeFactory('RECT'));

// Shape s = new Triangle();
// s.Draw(new Pen12mm());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值