作业要求:
创建型设计模式
要求:
(1) 某产品的有Android版本,Apple版本,Homos版本。请自建类模拟该产品的三个版本。
(2)以后还可能扩展该产品的版本如Imau版本
(3)请利用工厂方法模式实现用户能根据需求获得该产品的不同版本对象。
(4)用户的版本需求在配置文件中。
加分项:通过简单工厂来获得不同版本的工厂。
项目代码:
/**
* form : kkkkkba
* time : 2022/9/30
* 创建型设计模式
* 要求:
* (1) 某产品的有Android版本,Apple版本,Homos版本。请自建类模拟该产品的三个版本。
* (2)以后还可能扩展该产品的版本如Imau版本
* (3)请利用工厂方法模式实现用户能根据需求获得该产品的不同版本对象。
* (4)用户的版本需求在配置文件中。
* 加分项:通过简单工厂来获得不同版本的工厂。
*
*
* parma文件
* userlist = user1_version,user2_version,user3_version,user4_version
* user1_version=Android
* user2_version=Apple
* user3_version=Homos
* user4_version=Imau
*/
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
// 用户列表
String userlist = ReadParam.read("userlist");
System.out.println(userlist);
String[] list = userlist.split(",");
for(String i : list) {
String username = i.split("_")[0];
String version = ReadParam.read(i);
System.out.println(username+"需要" + version + "版本的产品");
ProductsFactory productsFactory = new SimpleFactory().getfactory(version);
if (productsFactory != null) {//如果返回的工厂不为空
System.out.println("创建产品版本:");
Product product = productsFactory.createProduct();
product.getVersion();
}
System.out.println("--------------------------");
}
}
}
class ReadParam{
public static String read(String name)throws Exception{
Properties p=new Properties();
InputStream in=new FileInputStream("param");
BufferedReader br=new BufferedReader(new InputStreamReader(in));
p.load(br);
String s=p.getProperty(name);
return s;
}
}
// 简单工厂
class SimpleFactory{
public ProductsFactory getfactory(String s){
if(s.equals("Android"))
return new AndroidFactory();
else if (s.equals("Apple"))
return new AppleFactory();
else if (s.equals("Homos"))
return new HomosFactory();
else
System.out.println("没有该版本的产品---"+s);
return null;
}
}
//抽象产品
abstract class Product{
//产品类的公共方法
// public void publicMethod() {
// System.out.println("xxx产品");
// }
//抽象方法
public abstract void getVersion();
}
// 具体产品
class AndroidProduct extends Product{
@Override
public void getVersion() {
System.out.println("Android");
}
}
class AppleProduct extends Product {
@Override
public void getVersion() {
System.out.println("Apple");
}
}
class HomosProduct extends Product{
@Override
public void getVersion() {
System.out.println("Homos");
}
}
//抽象工厂
abstract class ProductsFactory{
public abstract Product createProduct();
}
// 具体工厂
class AndroidFactory extends ProductsFactory {
@Override
public AndroidProduct createProduct() {
return new AndroidProduct();
}
}
class AppleFactory extends ProductsFactory {
@Override
public AppleProduct createProduct() {
return new AppleProduct();
}
}
class HomosFactory extends ProductsFactory {
@Override
public HomosProduct createProduct() {
return new HomosProduct();
}
}