当前位置: 代码迷 >> 综合 >> 软件设计——学习简单工厂
  详细解决方案

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

热度:44   发布时间:2023-11-24 11:41:26.0

【实验学习笔记】
一、理解简单工厂模式,根据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());