SimpleFactoryPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):开闭原则
SimpleFactoryPattern,UML抽象图百度找,代码实现如下
使用简单工厂模式设计一个可以创建不同几何形状(如圆形、矩形和三角形等)的绘图工具,每个几何图形都要有计算面积area()和计算周长gride()两个方法
抽象产品类
package SimpleFactoryPattern;
public interface Product {
public float area();
public float gride();
}
具体产品类
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Circular implements Product{
private float r;
public Circular(float r) {
this.r = r;
}
@Override
public float area() {
return 3.14f * r * r;
}
@Override
public float gride() {
return 3.14f * 2 * r;
}
}
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Rectangle implements Product {
private float width;
private float height;
public Rectangle(float width, float height) {
this.width = width;
this.height = height;
}
@Override
public float area() {
return width * height * 1.0f;
}
@Override
public float gride() {
return (width + height) * 2.0f;
}
}
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Triangle implements Product {
private float a;
private float b;
private float c;
public Triangle(float a, float b, float c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public float area() {
float p = (a+b+c)/2.0f;
return (float) Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
@Override
public float gride() {
return a+b+c;
}
}
简单工厂类
package SimpleFactoryPattern;
import java.util.Scanner;
import SimpleFactoryPattern.ConcreteProduct.Circular;
import SimpleFactoryPattern.ConcreteProduct.Rectangle;
import SimpleFactoryPattern.ConcreteProduct.Triangle;
public class Creator {
Scanner scan = new Scanner(System.in);
Product product=null;
public Product create(String type) { //工厂里的制造方法一定是静态吗!?
if("圆".equals(type)){
return new Circular(scan.nextFloat());
}else if("矩形".equals(type)){
return new Rectangle(scan.nextFloat(),scan.nextFloat());
}else if("三角形".equals(type)){
return new Triangle(scan.nextFloat(),scan.nextFloat(),scan.nextFloat());
}else{
return product;
}
}
}
测试类
package SimpleFactoryPattern;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Product product = new Creator().create("");
if(product==null){
System.out.println("请填写工厂条件");
}else{
System.out.println(product.area());
}
}
}
别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
SimpleFactoryPattern(23种设计模式之一)的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java开发中的23种设计模式(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- c#中的23种设计模式
C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...
- Java 23种设计模式
转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈Java的23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
随机推荐
- ios 加密解密(包括base64,DES)非原创
.h文件 #import <Foundation/Foundation.h> /******字符串转base64(包括DES加密)******/ #define __BASE64( tex ...
- linux下的第一个C程序及其编译方法
#include <stdio.h> #include <stdlib.h> int main(int argc, char ** argv) { printf(& ...
- String format方法的应用
String str=null; str=String.format("Hi,%s", "小超"); System.out.println(str); str= ...
- mysql_union all 纵向合并建表_20170123
年前事情比较多,博客不能每天更新了. 1.union all 纵向建表和left join 横向建表的数据结构区别 先贴代码 后面再补充 (#销售确认额 SELECT '05收货销售额' AS 标识, ...
- [Luogu3727]曼哈顿计划E
luogu 题意(简化版) 给你一棵树,每个点上有一个\(SG\)值,问你是否存在一条路径使得\(SG\)异或和为\(0\). sol 可以当做每个点的稳定值就是这个点上的石子数量. 很显然我们只需要 ...
- 浅议Windows 2000/XP Pagefile组织管理
任何时候系统内存资源相对磁盘空间来说都是相形见拙的.因为虚拟内存机制,使我们可以有相对丰富的地址资源(通常32bit的虚拟地址,可以有4G的寻址 空间),而这些资源对物理内存来说一般情况是总是绰绰有余 ...
- Kosaraju
https://www.cnblogs.com/nullzx/p/6437926.html
- 蓝桥杯 算法训练 ALGO-129 特殊的数字四十
算法训练 特殊的数字四十 时间限制:1.0s 内存限制:256.0MB 特殊的数字四十 问题描述 1234是一个非常特殊的四位数,因为它的各位数之和为10,编程求所有这样的四位十进制数. 输出 ...
- (转)heX——基于 HTML5 和 Node.JS 开发桌面应用
本文转载自:http://techblog.youdao.com/?p=685 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.是你开发 ...
- 转:MySQL Row Format(MySQL行格式详解)
MySQL Row Format(MySQL行格式详解) --转载自登博的博客