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