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